#include "script_debug.h"
#include <stdio.h>

static void script_log(char *fmt, va_list *ap, int level)
{
	switch(level){
		case SCRIPT_DEBUG_LEVEL_ERROR:
			printf("\033[31m[script error] ");
			break;
		case SCRIPT_DEBUG_LEVEL_WARNING:
			printf("\033[33m[script warning] ");
			break;
		default:
			printf("\033[34m[script debug] ");
			break;
			
	}
    vprintf(fmt, *ap);
    // 结束
    va_end(*ap);

    printf("\033[0m\n");
}

// 默认为打印到控制台
static void script_log_error(char *fmt, ...)
{
    // 定义可变参数列表
    va_list ap;
    // 获取不定参数的首地址，首地址是从fmt开始
    va_start(ap, fmt);
	script_log(fmt,&ap,SCRIPT_DEBUG_LEVEL_ERROR);
}

static void script_log_warni(char *fmt, ...)
{
    // 定义可变参数列表
    va_list ap;
    // 获取不定参数的首地址，首地址是从fmt开始
    va_start(ap, fmt);
	script_log(fmt,&ap,SCRIPT_DEBUG_LEVEL_WARNING);
}

static void script_log_debug(char *fmt, ...)
{
    // 定义可变参数列表
    va_list ap;
    // 获取不定参数的首地址，首地址是从fmt开始
    va_start(ap, fmt);
	script_log(fmt,&ap,SCRIPT_DEBUG_LEVEL_DEBUG);
}

// 初始化打印的位置为控制台
script_log_t g_script_log = {
    .error = script_log_error,
    .warni = script_log_warni,
    .debug = script_log_debug,
};

// 实现功能：提供给vicenter注册
int script_log_interface_register(script_log_print error, script_log_print warni, script_log_print debug)
{
    g_script_log.error = error;
    g_script_log.warni = warni;
    g_script_log.debug = debug;
	return 0;
}




